/*
 * @Author: Lwz
 * @Coding: utf-8
 * @Date: 2019-12-20
 */

import { message } from 'antd';
import { WeaLocaleProvider } from 'ecCom';

const getLabel = WeaLocaleProvider.getLabel;

/*
*兼容Windows、Mac、Linux的命名规则
* Windows:
*     1.255个字符(含扩展名) 或 127个中文字符，
*     2.文件名可以包含除 ? " " / \ < > * | : 之外的大多数字符
*     3.除了开头之外任何地方都可以使用空格
*     4.保留大小写格式，但不区分大小写
* Mac:
*     1.不能包含冒号 : 不能以句点开头 .
*     2.部分APP可能不允许使用斜杠 /
* Linux:
*     1.大小写敏感
*     2.不允许使用 /
*     3.不允许将.和..当做文件名
* 此外，还要将文件名首尾的空格去掉
*/
// turn === "turn"表示，不合规的字符会被修改成下划线(超出长度的字符被剪掉)
const nameRule_compatible = (fullName, name, turn) => {
   let flag = true;
   let errorMsg = '';
   const forbid = '?"/\\<>*|:';

   fullName = fullName.trim(); name = name.trimLeft();

   if (fullName.length > 255) {
      errorMsg = getLabel(513983, '名称不得超过255个字符');
      if (turn === 'turn') {
         name = name.substring(0, 216);
         fullName = `${name}.${fullName.split('.').pop()}`;
      }
   }

   for (let i = 0; i < forbid.length; i++) {
      if (name.includes(forbid[i])) {
         errorMsg = `${getLabel(513984, '文件名不能包含下列任何字符')}： \\ / : * ? " < > | `;
         if (turn === 'turn') {
            let regExp = new RegExp(`\\${forbid[i]}`, 'g');
            name = name.replace(regExp, '_');
            fullName = fullName.replace(regExp, '_');
         }
      }
   }

   if (name[0] === '.') {
      errorMsg = getLabel(513985, '不能以 . 开头');
      if (turn === 'turn') {
         fullName = `_${fullName.substring(1)}`;
         name = `_${name.substring(1)}`;
      }
   }

   if (errorMsg) {
      flag = false;
      message.warn(errorMsg);
   }

   return [flag, fullName, name];
};


export {
   nameRule_compatible,
};
